package com.gjzhao.fmmall.service;

import com.gjzhao.fmmall.entity.Product;
import com.gjzhao.fmmall.vo.RespResultVO;
import com.gjzhao.fmmall.vo.ResponseResultVO;

/**
 * @Description: 产品 Service
 * @Author: gjzhao
 * @Date Created in 2022-01-02 10:57 上午
 */
public interface ProductService {

    /**
     * 查询新上架推荐商品列表
     *
     * @return
     */
    ResponseResultVO listRecommendsProduct();

    /**
     * 获取该分类下的所有商品信息
     *
     * @return
     */
    ResponseResultVO listCategoryProduct(String categoryId);


    /**
     * 查询商品基本信息
     *
     * @param productId
     * @return
     */
    ResponseResultVO listProductBasicInfo(String productId);


    /**
     * 查询商品基本信息(先从redis缓存中查询商品信息，没有再从数据库查找)
     *
     * @param productId
     * @return
     */
    RespResultVO listProductBasicInfoByRedis(String productId);


    /**
     * 查询商品参数信息
     *
     * @param productId
     * @return
     */
    ResponseResultVO listProductParams(String productId);

    /**
     * 根据三级分类获取指定分页条件下的商品信息
     * @param categoryId
     * @param pageNum
     * @param limit
     * @return
     */
    ResponseResultVO listProductByCategory(String categoryId,int pageNum,int limit);


    /**
     * 根据分类id获取该跟分类下的所有商品所属品牌名字信息
     * @param categoryId
     * @return
     */
    ResponseResultVO listBrandsByCategory(Integer categoryId);


    /**
     * 根据关键词搜索商品信息(模糊匹配方式)
     * @param keyword
     * @param pageNum
     * @param limit
     * @return
     */
    ResponseResultVO searchProductByKeyword(String keyword,int pageNum,int limit);

    /**
     * 根据关键词搜索商品信息(elasticsearch方式)
     * @param keyword
     * @param pageNum
     * @param limit
     * @return
     */
    RespResultVO searchProductByKeywordByEs(String keyword,int pageNum,int limit);

    /**
     * 根据关键词查询出来的商品的所有品牌信息
     * @param keyword
     * @return
     */
    ResponseResultVO listBrandsByKeyword(String keyword);

    /**
     * 初始化商品信息到es中
     * @return
     */
    RespResultVO initProductsIntoEs();


    /**
     * 添加商品
     * @param product
     * @return
     */
    RespResultVO insertProduct(Product product);


    /**
     * 根据商品id删除商品信息(需要同步删除es中商品信息)
     * @param productId
     * @return
     */
    RespResultVO deleteProduct(String productId);
}
